param(
    [string] $Contain
)
 
$BASE_PATH = 'HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Mappings\'
# 获取相关注册表信息，并进行筛选和排序
$mapping = Get-ChildItem -Pat $BASE_PATH | Where-Object { $Contain -Eq "" -or $_.GetValue('DisplayName').Contains($Contain) } | Sort-Object { $_.GetValue('DisplayName') }
 
if ($mapping.Length -eq 0) {
    Write-Output "没有包含字符 $Contain 的软件包，请重试。"
    exit
} 
# 格式化打印 APP List
$mapping | Format-Table @{label = 'Num'; expression = { $mapping.IndexOf($_) } }, @{label = 'DisplayName'; expression = { $_.GetValue('DisplayName') } }
$input = Read-Host '回复序号并回车添加指定应用到排除列表中, 如果输入*则豁免所有app'
# 确保输入有效 
$input = $input.trim()  

if (   $input -eq "*"  ) { 
    $id = "*"  
    # 如果 $id 是 '*'，则对所有应用执行豁免
    if ($id -eq "*") {
        foreach ($app in $mapping) {
            $appId = $app.Name.Split("\") | Select-Object -Last 1
            Write-Output "为应用 $($app.GetValue('DisplayName')) 执行豁免"
            CheckNetIsolation LoopbackExempt -a -p="$appId"
        }
        Write-Output "所有应用已成功豁免。"
    } 

        
}
else {
    $id = $mapping[$input].Name.Split("\") | Select-Object -Last 1  
    $id = $id.trim()  
    if ($input -ge 0 -and $input -lt $mapping.Length) { 
        Write-Output "为应用 $($mapping[$input].GetValue('DisplayName')) 执行豁免" 
        CheckNetIsolation LoopbackExempt -a -p="$id" 
    
    }
    else {
        Write-Output "无效的输入，请输入一个有效的序号。"
    }
     
}